﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.IO;
using System.Windows.Forms;
using DAL;
using DAL.Modelos;
using DAL.Helpers;

namespace CuadroMandoIntegralFMCH.Form_s
{
    public partial class ObraSocialImportar : Form
    {
        Modelo modelo = new Modelo();


        public ObraSocialImportar()
        {
            InitializeComponent();
        }

        private void btImportar_Click(object sender, EventArgs e)
        {
            //Abrir archivo de texto plano para poder procesar y guardar las Obras Sociales
            openFileDialog1.FileName = "";
            openFileDialog1.Filter = @"(*.*)|*.*";

            if (openFileDialog1.ShowDialog() != DialogResult.OK) return;

            var path = openFileDialog1.FileName;
            progressBar1.Minimum = 0;
            progressBar1.Maximum = File.ReadAllLines(path).Length;
            backgroundWorker.RunWorkerAsync(path);

        }

        /// <summary>
        /// Procesa un archivo de texto plano separado por | los campos son
        /// CodEntidad, Denominacion, Abreviatura, Dirección, CodigoPostal, Cuit, CondicionIVA 
        /// </summary>
        /// <param name="e">ruta de archivo</param>
        private void backgroundWorker_DoWork(object sender, DoWorkEventArgs e)
        {
            var path = e.Argument as string;
            var i = 1;

            if (path == null) return;

            var archivo = new StreamReader(path);

            while (archivo.Peek() != -1)
            {

                var linea = archivo.ReadLine();

                if (string.IsNullOrEmpty(linea)) continue;

                var lineaSeparada = linea.Split('|');

                //Empieza por la segunda posicion ya que esta vacia la primer posicion en cuanto a la exportacion del sistema 
                //de Ricardo Marin.
                var codObraSocial = lineaSeparada[1];
                //Elimino el caracter /
                codObraSocial = codObraSocial.Replace("/", "");
                codObraSocial = codObraSocial.Replace(" ", "");

                var denominacion = lineaSeparada[2];

                var abreviatura = lineaSeparada[3];

                var direccion = lineaSeparada[4];

                var codigoPosal = lineaSeparada[5];
                codigoPosal = codigoPosal.Replace(".", "");
                codigoPosal = codigoPosal.Replace(" ", "");

                if (codigoPosal == "")
                    codigoPosal = "0";

                var cuit = lineaSeparada[6];
                cuit = cuit.Replace(" ", "");

                if (cuit == "")
                    cuit = "0";

                var condicion = lineaSeparada[7];
                condicion = condicion.Replace(" ", "");

                int idCondicion;

                switch (condicion)
                {
                    case "Inscripto":
                        idCondicion = 1;
                        break;
                    case "Exento":
                        idCondicion = 3;
                        break;
                    default:
                        idCondicion = 6;
                        break;

                }

                //Crear objeto entidad de la linea leida


                var obraSocial = new Entidades_O_S__()
                {
                    Codigo = decimal.Parse(codObraSocial),
                    Denominacion = denominacion,
                    Abreviatura = abreviatura,
                    Direccion = direccion,
                    CodPostal = int.Parse(codigoPosal),
                    Cuit = cuit,
                    IdTipoEntidad = 4,
                    IdCondicion = idCondicion,
                    BajaLogica = false
                };

                backgroundWorker.ReportProgress(i);
                i++;
                var mensaje = modelo.VerificacionExistencia(obraSocial.Codigo);

                if (mensaje.status) continue;
                //MessageBox.Show(mensaje.message, @"Advertencia", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                mensaje = modelo.AddEntidad(obraSocial);

                if (!mensaje.status)
                    MessageBox.Show(mensaje.message, @"Error", MessageBoxButtons.OK, MessageBoxIcon.Error);


            }
        }

        private void backgroundWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            progressBar1.Visible = true;
            lbImportar.Visible = true;
            btImportar.Enabled = false;
            progressBar1.Value = e.ProgressPercentage;
            lbImportar.Text = e.ProgressPercentage.ToString() + @" archivos leidos";
        }

        private void backgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            progressBar1.Visible = false;

            if (e.Error != null)
            {
                MessageBox.Show(@"Error: "+ e.Error.Message , @"Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            else
            {
                MessageBox.Show(@"Finalizo la Importación", @"Advertencia", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            
        }
        
    }
}
